草庐IT

Java BufferedImage 内存消耗

全部标签

windows - 从完整内存转储中提取进程转储

我遇到了一个错误,但我无法创建进程转储。我创建了系统的完整内存转储。我如何使用它提取进程转储?Windows。 最佳答案 你不能。通常,属于您的进程的某些内存段可能会被调出并且不驻留在物理内存中。这意味着使用完整的内核内存转储,您不能保证重建进程地址空间。在许多情况下,您可以从内核转储中提取有关进程的有用信息。但是有两个限制:正如我已经提到的,内存可以调出。许多WinDbg扩展不能与内核转储一起使用。这包括SOS,因此从内核空间调查托管进程要困难得多。 关于windows-从完整内存转储

c++ - 如何将文件内容复制到虚拟内存中?

我有一个小文件,我查看它并计算其中的字节数:while(fgetc(myFilePtr)!=EOF){numbdrOfBytes++;}现在我分配相同大小的虚拟内存:BYTE*myBuf=(BYTE*)VirtualAlloc(NULL,numbdrOfBytes,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);我现在想将文件的内容复制到nyBuf中。我该怎么做?谢谢! 最佳答案 大纲:FILE*f=fopen("myfile","r");fread(myBuf,numberOfBytes,1,f);这

java - 读取内存中的exe文件并执行

是否可以使用Windows将文件读入内存(将数据保存在字节数组中),从文件系统中删除原始文件并从内存中执行它?编辑我的目标是保护我的Java代码免遭逆向工程。我用C++编写了一个启动程序,它获取我的加密jar文件,对其进行解密并启动它。小问题是我必须将解密的jar文件写在文件系统中的某个位置,这样它就可以很容易地被捕获和反编译……没有办法阻止这种情况吗? 最佳答案 不,不可能那样做。没有系统调用说“获取我的这block内存并只使用它的那一部分作为新进程的镜像”。您可以将代码加载到内存中并在当前进程中跳转到它,但这是一件很丑陋的事情,

windows - 调查内存泄漏

我们的应用程序中有一个缓慢的内存泄漏,我已经通过以下步骤尝试分析泄漏的原因:在GFlags中启用用户模式堆栈跟踪数据库在Windbg中,键入以下命令:!heap-stat-h1250000(其中1250000是发生泄漏的堆的地址)比较多个转储后,我看到大小为0xC的内存块随时间增加,可能是泄漏的内存。键入以下命令:!heap-fltsc给出这些分配的UserPtr,最后:在其中一些地址上键入!heap-p-aaddress总是会显示以下分配调用堆栈:0:000>!heap-p-a10576ef8address10576ef8foundin_HEAP@1250000HEAP_ENTRYS

c++ - 共享内存 - 需要同步

我见过一个项目,其中进程之间的通信是使用共享内存进行的(例如,在Windows下使用::CreateFileMapping),每次其中一个进程想要通知某些数据可用时共享内存,一种使用命名事件的同步机制通知相关方共享内存的内容发生了变化。我担心这样一个事实,即读取新信息的进程不存在适当的内存栅栏,以知道它必须使它的数据拷贝无效并在它被“发布”后从主内存中读取它生产者进程。您知道如何在Windows上使用共享内存实现这一点吗?编辑只是想补充一点,在创建文件映射后,进程仅使用MapViewOfFile()API一次,并且对共享数据的每次新修改都使用通过初始调用MapViewOfFile()获

c++ - 读取进程的进程内存不会返回所有内容

我正在尝试扫描第3方应用程序的内存。我已经查到地址了;现在位于0x0643FB78。问题是,我永远无法到达那里,因为LPMODULEENTRY32->modBaseAddr是0x00400000而LPMODULEENTRY32->modBaseSize只是0x006FF000,因此我可以扫描该模块的最大地址是0x00AFF000。这是否意味着我寻找的地址确实存在于另一个进程/模块/线程/某物中?我非常有信心我的流程确实包含地址。那我应该如何访问内存呢?谢谢。 最佳答案 至少在我看来,如果您涉及到LPMODULEENTRY,那么您的起

windows - 如何增加内存来处理超大的 Lua 表

我有一个Lua函数,它在给定n的情况下生成系列从1到n的所有排列,并将每个唯一系列以表格形式存储在容器表中。这个生成的表的大小很快就会变得非常大(而且必然如此)。大约在我尝试n=11时,脚本将运行几秒钟,然后出现“lua:内存不足”。我有16gb的物理RAM,但在Windows任务管理器中观察性能监视器可以让我看到ram在运行时被消耗,并且在脚本以内存错误结束之前它只达到大约20%。我发现这篇文章看起来像我需要前进的方向:memoryofaprocessinLua由于我使用Lua.exe运行我的脚本,我假设我受限于Windows为Lua.exe分配的内存量。我可以增加这个数额吗?我可以

c++ - Windows 怎么知道我没有使用内存?

我注意到这种奇怪的效果,内存在被触摸之前不会注册为Windows任务管理器分配的,而不是当它被malloc-ed或new-ed时.在debug和优化的release构建中都会出现这种效果。下面是一个结构示例,虽然在我的代码中分配和利用发生在不同的线程上,所以我不认为它是优化器,虽然我不确定如何检查。for(inti=0;i我的问题是Windows如何知道我使用了内存?它是监视首次使用的内存还是一些编译时优化。我的好奇心来自于我正在编写的实时采集,它要求我触摸内存两次->一次是在分配时,一次是在实际填充数据时。因此按下一个按钮(“获取!”)需要我一次写入64GB的ram,而不是随着时间的

三步搞定OOM内存溢出,记一次使用Arthas处理OOM内存溢出问题java.lang.OutOfMemoryError: Java heap space

记一次OOM内存溢出问题修复java.lang.OutOfMemoryError:JavaheapspaceOutOfMemoryError1.使用article找到问题线程2.分析线程运行链路,找出问题代码位置3.使用堆文件确认问题Arthas是Alibaba开源的Java诊断工具,功能强大,操作简单Arthas官网https://arthas.aliyun.comOutOfMemoryError一大早过来上班项目启动后随意刷几个接口后服务就像卡主一样接口调不通了,然后就报错。这里的思路是OOM一般都是由某个线程执行代码时创建对象过多导致占用大量的内存导致的,那好,那么我们就先找到这个造成问

c++ - 为什么虚拟内存地址在不同的进程中是相同的?

我知道Windows中的虚拟内存分为2G(内核)/2G(用户)。但是为什么变量的地址不是连续的栈呢?喜欢0x22ff74,0x22ff78,0x22ff82,0x22ff86吗?是不是Windows在用户进程中使用了沙箱机制? 最佳答案 这就是虚拟内存。操作系统为每个程序提供了自己的私有(private)地址空间。实际上,操作系统负责在应用程序不知情的情况下将这些虚拟地址映射回物理地址空间。正如您所注意到的,这意味着两个应用程序可以将不同的数据驻留在程序中的同一虚拟地址。阅读有关虚拟内存的更多信息here.